package com.solution.admin.auth.dao;

import java.util.List;
import java.util.Map;

import com.solution.admin.auth.entity.RoleEntity;
import com.solution.common.dao.BaseDao;
import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;

/**
 * 角色管理Dao层接口
 * 
 * @author yaoyu
 * @date 2017年3月28日  下午12:02:33
 */
public interface RoleDao extends BaseDao<RoleEntity> {
	
	/**
	 * 获取单个角色
	 * @author yaoyu
	 * @date 2017年3月28日  上午11:31:50
	 * @param roleCode
	 * @return
	 */
	public RoleEntity getRole(long roleCode);
	
	/**
	 * 新增角色
	 * @author yaoyu
	 * @date 2017年3月28日  上午11:32:12
	 * @param role
	 * @return
	 */
	public long saveRole(RoleEntity role);
	
	/**
	 * 更新角色
	 * @author yaoyu
	 * @date 2017年3月28日  上午11:32:25
	 * @param role
	 * @return
	 */
	public int updateRole(RoleEntity role);
	
	
	/**
	 * 更新角色状态
	 * @author llp
	 * @date 2017年3月28日  上午11:32:25
	 * @param role 角色
	 * @return
	 */
	public int updateRoleStatus(RoleEntity role);
	
	/**
	 * 删除角色
	 * 
	 * @author yaoyu
	 * @date 2017年3月28日  上午11:32:38
	 * @param roleCode
	 * @return
	 */
	public int removeRole(long roleCode);
	
	/**
	 * 查询用户登录某系统的角色列表
	 * @param param 
	 * @return
	 * @author llp
	 * @date 2017年4月18日 上午11:54:38
	 */
	public List<RoleEntity> listRole(Map<String, Object> param);
	/**
	 *  根据经销商编号查询角色列表 
	 * @param param
	 * @return
	 * @author chenl
	 * @date 2017年5月22日 下午2:25:21
	 */
	List<RoleEntity> listRoleByDealerId(Map<String, Object> param); 

	/**
	 * 添加角色权限
	 * @param map
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author zhuoyu
	 * @date 2017年4月10日 上午8:53:23
	 * @modify <scy> <2017年4月10日 上午8:53:23>
	 */
	public int insertRoleResource(Map<String, Object> map);
	
	/**
	 * 根据角色id 删除角色权限
	 * @param id
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author zhuoyu
	 * @date 2017年4月10日 上午9:09:29
	 * @modify <scy> <2017年4月10日 上午9:09:29>
	 */
	public int deleteRoleResourceById(long id);
	
	/**
	 * 根据角色查询权限
	 * @param id
	 * @return
	 * @author zhuoyu
	 * @date 2017年4月10日 上午9:22:17
	 */
	public List<Long> getRoleResourceById(Map<String, Object> map);
	
	/**
	 * 分页查询
	 * @param pageParam
	 * @param paramMap
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author zhuoyu
	 * @date 2017年4月11日 上午11:33:36
	 * @modify <scy> <2017年4月11日 上午11:33:36>
	 */
	public PageBean getRolePage(PageParam pageParam, Map<String, Object> paramMap);
	
	/**
	 * 判断角色名是否存在
	 * @param roleName
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author zhuoyu
	 * @date 2017年4月13日 上午11:19:59
	 * @modify <scy> <2017年4月13日 上午11:19:59>
	 */
	public long getRoleByName(String roleName);
	
	/**
	 * 判断角色编号是否存在
	 * @param roleCode
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author zhuoyu
	 * @date 2017年4月13日 上午11:20:15
	 * @modify <scy> <2017年4月13日 上午11:20:15>
	 */
	public long getRoleByCode(String roleCode);
	
	/**
	 * 查询所有角色信息
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author diwankang
	 * @date 2017年4月13日 下午5:27:38
	 * @modify <scy> <2017年4月13日 下午5:27:38>
	 */
	List<RoleEntity> listAllRoleList();
	
	
	/**
	 * 查询用户的角色信息
	 * @param userId 用户ID
	 * @return
	 * @author llp
	 * @date 2017年4月14日 上午8:55:29
	 */
	public List<RoleEntity> listRoleListByUserId(Long userId);
	/**
	 * 查询用户可分配及已分配的角色列表
	 * @param dealerId 经销商ID
	 * @param userId 用户ID
	 * @return 角色列表
	 */
	public List<RoleEntity> listRoleWithChkflagForUser(Long userId);
	/**
	 * 查询用户是否是某角色
	 * @param userId 用户ID
	 * @param roleId 角色ID
	 * @return true 有  false 无
	 */
	public boolean checkUserRoleChkFlg(Long userId, Long roleId);
	
	/**
	 * 更新角色名称
	 * @param roleId 角色编号
	 * @param roleName 角色名称
	 * @param roleIntro 
	 * @return 更数的行数
	 */
	public int updateRoleName(Long roleId,String roleName, String roleIntro);

	/**
	 * 删除角色授权
	 * @param id
	 */
	public void deleteRoleResourceByRoleId(Long id);

	/**
	 * 逻辑删除角色
	 * @param roleId
	 * @return
	 */
	public int logicDeleteRole(long roleId);
	
}
